package com.example.project.projectspringcloud.dao;

import com.example.project.projectspringcloud.entity.BaseEntity;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 基础Mapper
 *
 * @param <T>
 */
public interface BaseMapper<T extends BaseEntity> {

    /**
     * 按ID删除
     * ==============================================================================
     *
     * @param id
     * @return int
     */
    int deleteByPrimaryKey(Integer id);

    /**
     * 插入
     * ==============================================================================
     *
     * @param record
     * @return int
     */
    int insert(T record);

    /**
     * 选择插入
     * ==============================================================================
     *
     * @param record
     * @return int
     */
    int insertSelective(T record);

    /**
     * 通过主键查询
     * ==============================================================================
     *
     * @param id
     * @return T
     */
    T selectByPrimaryKey(Integer id);

    /**
     * 通过主键选择更新
     * ==============================================================================
     *
     * @param record
     * @return int
     */
    int updateByPrimaryKeySelective(T record);

    /**
     * 通过主键更新
     * ==============================================================================
     *
     * @param record
     * @return int
     */
    int updateByPrimaryKey(T record);

    /**
     * 查询单条信息
     * ==============================================================================
     *
     * @param record
     * @return T
     */
    T selectOne(T record);

    /**
     * 查询全部
     * ==============================================================================
     *
     * @param record
     * @return List<T>
     */
    List<T> selectAll(T record);

    /**
     * 按ID数组删除
     * ==============================================================================
     *
     * @param ids
     * @return int
     */
    int deleteByArrayPrimaryKey(@Param("ids") Integer[] ids);

}
